// Copyright (C) 2018 Igalia, S.L. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
description: Relational comparison of BigInt and string values
esid: sec-abstract-relational-comparison
features: [BigInt]
---*/
function Test() {
    assert.sameValue(0n <= '0', true, 'The result of (0n <= "0") is true');
    assert.sameValue('0' <= 0n, true, 'The result of ("0" <= 0n) is true');
    assert.sameValue(0n <= '1', true, 'The result of (0n <= "1") is true');
    assert.sameValue('0' <= 1n, true, 'The result of ("0" <= 1n) is true');
    assert.sameValue(1n <= '0', false, 'The result of (1n <= "0") is false');
    assert.sameValue('1' <= 0n, false, 'The result of ("1" <= 0n) is false');
    assert.sameValue(0n <= '', true, 'The result of (0n <= "") is true');
    assert.sameValue('' <= 0n, true, 'The result of ("" <= 0n) is true');
    assert.sameValue(0n <= '1', true, 'The result of (0n <= "1") is true');
    assert.sameValue('' <= 1n, true, 'The result of ("" <= 1n) is true');
    assert.sameValue(1n <= '', false, 'The result of (1n <= "") is false');
    assert.sameValue('1' <= 0n, false, 'The result of ("1" <= 0n) is false');
    assert.sameValue(1n <= '1', true, 'The result of (1n <= "1") is true');
    assert.sameValue('1' <= 1n, true, 'The result of ("1" <= 1n) is true');
    assert.sameValue(1n <= '-1', false, 'The result of (1n <= "-1") is false');
    assert.sameValue('1' <= -1n, false, 'The result of ("1" <= -1n) is false');
    assert.sameValue(-1n <= '1', true, 'The result of (-1n <= "1") is true');
    assert.sameValue('-1' <= 1n, true, 'The result of ("-1" <= 1n) is true');
    assert.sameValue(-1n <= '-1', true, 'The result of (-1n <= "-1") is true');
    assert.sameValue('-1' <= -1n, true, 'The result of ("-1" <= -1n) is true');

    assert.sameValue(
      9007199254740993n <= '9007199254740992',
      false,
      'The result of (9007199254740993n <= "9007199254740992") is false'
    );

    assert.sameValue(
      '9007199254740993' <= 9007199254740992n,
      false,
      'The result of ("9007199254740993" <= 9007199254740992n) is false'
    );

    assert.sameValue(
      -9007199254740992n <= '-9007199254740993',
      false,
      'The result of (-9007199254740992n <= "-9007199254740993") is false'
    );

    assert.sameValue(
      '-9007199254740992' <= -9007199254740993n,
      false,
      'The result of ("-9007199254740992" <= -9007199254740993n) is false'
    );
}

// preheat
const NUMBER_OF_PREHEAT = 1;
for (let i = 0; i < NUMBER_OF_PREHEAT; i++) {
    Test();
}

ArkTools.jitCompileAsync(Test);
assert.sameValue(ArkTools.waitJitCompileFinish(Test), true, '[JIT] JIT disabled.');

// test
const NUMBER_OF_TEST = 1; // or 2
for (let i = 0; i < NUMBER_OF_PREHEAT; i++) {
    Test();
}
